#ifndef BB_OBJECT_H_
#define BB_OBJECT_H_

#include <QString>
#include <QVariant>
#include <QMap>

class BBObject
{
public:
	BBObject()
	{
		m_id = ATTRIBUTE_ID_VALUE_DEFAULT;
		m_parentId = ATTRIBUTE_ID_VALUE_DEFAULT;
	}

	~BBObject()
	{
		//DOES NOTHING
	}

	//Name
	QString getName()
	{
		return m_name;
	}

	void setName( QString name )
	{
		m_name = name;
	}

	//Attributes primitive values
	QMap<QString, QVariant> getAttributesPrimitiveValues()
	{
		return m_attributesPrimitiveValues;
	}

	void setAttributesPrimitiveValues( QMap<QString, QVariant> attributesPrimitiveValues )
	{
		m_attributesPrimitiveValues = attributesPrimitiveValues;
	}

	QVariant getAttributePrimitiveValue( QString& attributeName )
	{
		return m_attributesPrimitiveValues[attributeName];
	}

	void setAttributePrimitiveValue( QString attributeName, QVariant attributeValue )
	{
		m_attributesPrimitiveValues[attributeName] = attributeValue;
	}

	//Attributes composition values
	QMap<QString, QVariant> getAttributesCompositionValues()
	{
		return m_attributesCompositionValues;
	}

	void setAttributesCompositionValues( QMap<QString, QVariant> attributesCompositionValues )
	{
		m_attributesCompositionValues = attributesCompositionValues;
	}

	QVariant getAttributeCompositionValue( QString& attributeName )
	{
		return m_attributesCompositionValues[attributeName];
	}

	void setAttributeCompositionValue( QString attributeName, QVariant attributeValue )
	{
		m_attributesCompositionValues[attributeName] = attributeValue;
	}

	//Attributes types
	QMap<QString, QString> getAttributesTypes()
	{
		return m_attributesTypes;
	}

	void setAttributesTypes( QMap<QString, QString> attributesTypes )
	{
		m_attributesTypes = attributesTypes;
	}

	QString getAttributeType( QString& attributeName )
	{
		return m_attributesTypes[attributeName];
	}

	void setAttributeType( QString attributeName, QString attributeType )
	{
		m_attributesTypes[attributeName] = attributeType;
	}

	//Object's id
	int id()
	{
		return m_id;
	}

	void setId( int id )
	{
		m_id = id;
	}

	//Object's parent id
	int getParentId()
	{
		return m_parentId;
	}

	void setParentId( int parentId )
	{
		m_parentId = parentId;
	}

	static int ATTRIBUTE_ID_VALUE_DEFAULT;

private:
	QString m_name;
	int m_id;
	int m_parentId;
	QMap<QString, QVariant> m_attributesPrimitiveValues;
	QMap<QString, QVariant> m_attributesCompositionValues;
	QMap<QString, QString> m_attributesTypes;
};

#endif